NuttX-7.8
---------

The 108th release of NuttX, Version 7.8, was made on February 11, 2015,
and is available for download from the SourceForge website. Note
that release consists of two tarballs: nuttx-7.8.tar.gz and
apps-7.8.tar.gz. Both may be needed (see the top-level nuttx/README.txt
file for build information).

This release is primarily a bugfix release for the NuttX-7.7 version that
was release just two weeks prior. That release included substantial
modifications in the NuttX networking to accommodate support for IPv6. This
release follows close behind NuttX-7.7 in order to correct some the problems
discovered in that networking code. This release does, however, include a
small number of new features and bug fixes unrelated to NuttX networking.

Additional new features and extended functionality:

* Core OS:

- Tickless Mode: added limit of maximum delay that can be request
by the scheduler tickless logic. This is necessary so that the
tickless logic does not request a delay beyond the capability of the
underlying hardware. From Macs Neklyudov.

* Common Drivers:

- VFS Unlink: Add an unlink method to both the character and block
driver interface. This is important because if the driver inode is
unlinked and there are no open references to the driver, then the
driver resources will be stranded. On the unlink call, the driver
has the opportunity (1) check if there an any open references, and
if not, (2) free the driver resources.
- Pipes and FIFOs: Implement the unlink method. If the pipe/FIFO is
unlinked, it will marked the pipe/FIFO as unlinked. If/when all
open references to the driver are closed, all of the driver
resources will be freed.
- Added an option to use the syslog'ing device as the system console.
This option enables a low-level, write-only console device at
/dev/console (similar to the low-level UART console device). From
Pierre-noel Bouteville.

* File Systems/Block Drivers/MTD:

- RAM/ROM disk: Add logic to dispose of the driver and RAM buffer
when the RAM disk has been unlinked and all open references to the
RAM disk have been closed. Add new parameters to romdisk() to
specify what should be done with the RAM/ROM buffer in this case --
Should it be freed or not? Changed all calls to ramdisk() to use
these new parameters.

* Networking:

- Add support for local, Unix domain sockets. Support included for
both SOCK_STREAM and SOCK_DGRAM style local socket.
- UDP enhancement: Add UDP read-ahead support. In addition to
eliminating the main reason for lost UDP packets, then change
enables support for for poll/select on UDP sockets and also non-
blocking UDP sockets. From Macs Neklyudov.
- SLIP interface improvements. From Macs Neklyudov.
- IPv6 Neighbor Solicitation: Added logic to support verification
that we have the IPv6 address in the Neighbor Table before sending
any packets. If not, then the Neighbor Solicitation message is
sent. This feature is important because otherwise the first packet
sent to a remote peer will fail (it would have been replaced with a
Neighbor Solicitation).
- IPv6 Autonomous Auto-Configuration: Added support for sending
ICMPv6 Router Solicitation and receiving Router advertisement. The
local IPv6 address, mask, and router address are then auto-configured
from the response..
- IPv6 Router Support: Add logic to behave like a router (if so
configured) only in the sense that NuttX will send the router
advertisement message in response to any received router solicitation
messages. Thus, one NuttX node in a network can configure the IPv6
addresses of all other nodes in the network.
- Optional IPv6 address filtering added to all Ethernet drivers for
the all-routers multicast address.

* Atmel AVR:

- Added architecture support for the Atmel AVR ATMega1284P MCU. From
Jedi Tek'Unum.

* Atmel AVR Boards:

- Added support for the LowPowerLab MoteinoMEGA that is based on the
Atmel AVR ATMega1284P MCU. From Jedi Tek'Unum.

* Atmel SAMA4:

- Add support for Tickless mode of operation for the SAM4CM platform.
From Macs Neklyudov.

* Atmel SAMA4 Drivers:

- Ethernet: The SAM4E Ethernet driver can now be configuration to
perform all network processing on the work queue. This greatly
reduces the amount of interrupt level processing to service Ethernet
packets.
- SAM4E Ethernet: Add support multicast address matching and IPv6.

* Atmel SAMA4 Boards:

- SAM4E-EK: The nsh configuration now configures the Ethernet driver
for execution on the work thread.

* Atmel SAMA5D Drivers:

- SAMA5D4 Ethernet: The SAMA5D4 Ethernet driver can now be configuration
to perform all network processing on the work queue. This greatly
reduces the amount of interrupt level processing to service Ethernet
packets.
- SAMA5D3 and SAMA5D4 Ethernet: Add support multicast address matching
and IPv6.

* Atmel SAMA5D Boards:

- SAMA5D4-EK; Added a configuration to testing IPv6.
- SAMA5D4-EK: Converted the nsh and ipv6 configurations to configure
the Ethernet driver to use the work queue (vs. interrupt level
processing).

* Freescale KL:

- Add architectural support for the K26Z128VLH4 chip. From Derek B. Noonburg.

* Freescale KL Boards:

- Add board support for the Freedom KL26Z board. From Derek B. Noonburg.

* NXP LPC17xx Drivers:

- Ethernet: Add support multicast address matching and IPv6.

* SiLabs EFM32:

- Add configurable option to unconditionally enable LE clocking. Even
you don't use core clock LE as source for LFA or LFB, to read are
write any register not clocked by HFPERCLK or HFCORECLK, HFCORECLKLE
should be enabled. From Pierre-noel Bouteville.

* SiLabs EFM32 Drivers:

- EFM32 RTC: RTC driver using BURTC. From Pierre-Noel Bouteville.

* STMicro STM32 Drivers:

- AES: Add driver for STM32L162XX AES peripheral. From Juha Niskanen.
- Ethernet: The STM32 Ethernet driver can now be configuration to
perform all network processing on the work queue. This greatly
reduces the amount of interrupt level processing to service Ethernet
packets.
- Ethernet: Add support multicast address matching and IPv6.

* STMicro STM32 Boards:

- Added an IPv6 configuration for the STM32F4-Discovery board (with the
STM32-DISCO_BB base board).
- Converted all STM32F4-Discovery configurations (with base board) to
configure the Ethernet driver to use the work queue (vs. interrupt
level processing).

* TI Tiva Drivers:

- Added support for TM4C123G timers. From Calvin Maguranis.
- Added a Tiva ADC driver. From Calvin Maguranis.

* TI Tiva Boards:

- Added TM4C123G timers on the TM4C123G Launchpad. From Calvin Maguranis.
- Added Tiva ADC support to the TM4C123G-Launchpad. From Calvin Maguranis.

* C Library/Header Files:

- Math Library: Added support for inverse hyperbolic functions,
isfinite(), error functions, nan(), copysign(), and trunc()
functions. From Brennan Ashton.

* Applications:

- apps/examples/ustream: Add a simple test of Unix domain stream
sockets.
- apps/examples/udgram: Add a simple test of Unix domain datagram
sockets.
- apps/netutils/netlib: Add utilities to convert to/from prefix
lengths from/to 128-bit network masks.
- apps/nshlib: Modify the NSH IPv6 ifconfig command to show the more
standard post-pended prefix value, rather than the full 128-bit
netmask.

Efforts In Progress. The following are features that are partially
implemented but present in this release. They are not likely to be
completed soon.

* Processes. Much of the work in this release is focused on the
realization of Unix-style user processes in NuttX. There is more to
be done, however. The full roadmap and status is available at:
https://cwiki.apache.org/confluence/display/NUTTX/Memory+Configurations

* XMega: There are some fragments in place for an XMega port. That
port has not really started, however.

Bugfixes. Only the most critical bugfixes are listed here (see the
ChangeLog for the complete list of bugfixes and for additional, more
detailed bugfix information):

* Core OS:

- Work Queues: Fix a backward calculation when determining the time
to the next interesting event. . From Liio Chen via the PX4
repository.
- clock_systimespec(): Fixes for compilation errors in certain
configurations. From Macs Neklyudov.

* Graphics

- Fixed a problem with one of the font files. From Pierre-noel Bouteville.

* Networking:

- IOB Deadlock: There were issues with the TCP write-ahead buffering
if CONFIG_NET_NOINTS was enabled: There is a possibility of
deadlocks in certain timing conditions: The network should never
wait for TCP read-ahead buffering space to be available. It should
drop the packets immediately if no buffering is available. This was
fixed by duplicating most of the IOB interfaces: The versions that
waited are still present (like iob_alloc()), but now there are non-
waiting versions of the same interfaces (like iob_tryalloc()). The
TCP read-ahead logic now uses only these non-waiting interfaces.
- TCP Deadlock: Fix another deadlock when CONFIG_NET_NOINTS is enabled.
tcp_write_buffer_alloc() calls sem_wait() with network locked. That
worked if CONFIG_NET_NOINTS was not defined because interrupts are
automatically restored when the wait happens. But with
CONFIG_NET_NOINTS=y, the wait blocks with the network locked -- bad
style and also can lead to a deadlock condition.
- ARP response waiting: Fixes another CONFIG_NET_NOINTS issue. When
called sem_timedwait() with the network locked, the network stays
locked while we wait which is not what we want (without CONFIG_NET_NOINTS,
interrupts are re-enabled while we wait and all is well).
- TCP accept(): Fix a major TCP bug introduced with the NuttX-7.7
IPv6 changes: Some connection logic was reordered; setting the
socket as 'connected' got moved to BEFORE the point where the check
was made if the socket was already connected. The resulting behavior
was odd: Telnet would connect, but then when you exit and reconnect,
it would fail to connect. But then if try again, it would connect
okay. So the symptom was connect-fail-connect-fail-...
- Lots of build problems introduced into multiple NIC support with the
IPv6 changes of NuttX-7.7. Many places where conditional logic based
on CONFIG_NETDEV_MULTINIC is confused with CONFIG_NET_MULTILINK.
Lots of code changed with IPv6 that was never compiled with MULTINIC
enabled.

* Common Drivers:

- Pipes and FIFOs: Fix a race condition between FIFO buffer operations
and the opening and closing of FIFOs which necessary when the FIFOs
are used to support Unix domain, datagram sockets. The default
policy is the deallocate FIFO buffering when the last client closes
the pipe. When when used for datagram communications, packets left
in the FIFO will be lost. Some like UDP read-ahead is needed: The
buffered data in the FIFO needs to be retained until the reader gets
a chance to re-open the FIFO. Added an ioctl (PIPEIOC_POLICY) to
control the buffer policy. Default (0) is the legacy behavior; Unix
domain datagram logic sets the alternative policy so that the packet
data persists after the FIFO is closed.
- RAMTRON: Table of parts is not terminated properly if
CONFIG_RAMTRON_FRAM_NON_JEDEC is not defined. Noted by David
Sidrane.

* All Architectures:

- Removed all occurrences of up_maskack_irq() that disables interrupts
with up_ack_irq() that only acknowledges the interrupts. This is only
used in interrupt decoding logic. Also remove the logic that
unconditionally re-enables interrupts with the interrupt exits. This
interferes with the drivers ability to control the interrupt state.
This is a necessary, sweeping, global change and unfortunately
impossible to test.

* ARM

- ARMv7-A and ARMv7-M memcpy(): Optimized ARM assembly language
memcpy's were not returning a value in R0 they are required to do.
From David Sidrane.
- ARMv7-A interrupt handler should not automatically re-enable interrupts
on interrupt return. That interferes with the driver's ability to
manage interrupts. Analogous change made to all other architectures
as well (ARM7, ARM9, HC, SH, x86, z16, z80, etc,. See above.).

* STMicro STM32:

- GPIO Interrupts: Disabling any of EXTI 5-9 interrupts was disabling
interrupts for all EXTI 5-9. Same issue with EXTI 10-15. From Jussi
Kivilinna.

* STMicro STM32 Drivers:

- RTCC: Fix for recent changes that caused compilation failrues with
STM32L15XX configurations. From Jussi Kivilinna.
- SPI: The source clock for SPI 4,5, and 6 should be PCLK2, not PCLK1
(for F411, F427, and F429). Per David Sidrane.

* C Library/Header Files:

- execl(): Fix bad logic in counting the number of arguments.
execl() parameter passing could never have worked. Noted by
Pierre-noel Bouteville.

* Applications:

- Fix for building with parallel make. Build-server sometimes failed
'make -j24' with errors in the builtin line or or sometimes silently
succeeds but generated builds that contain a random subset of
configured NuttX applications. There are two root causes for this:
(1) Recipes for building builtin_list.h and builtin_proto.h are
not linearizable, and (2) Nothing ensures that 'make context' is run
first for apps/builtin. This change address both issues. From Juha
Niskanen.
